
package tpcar.ejb;
import java.util.List;

import javax.ejb.Stateful;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 * Defines a statefull bean. This beans provides methods
 * for accessing the card entities.<br>
 * By default, an interface is considered as a local interface if there is no
 * @Remote annotation.
 */
@Stateful(mappedName="AdminPersonneBean")
public class AdminPersonneBean implements AdminPersonne {

	/**
	 * Entity manager utilise par ce bean.
	 */
	@PersistenceContext
	private EntityManager entityManager = null;



	public boolean addPersonne(String nom, String prenom, String dateNaissance,
			String lieuNaissance, String sexe) {
		try {
			Personne personne = new Personne(nom, prenom, dateNaissance, lieuNaissance,sexe);
			entityManager.persist(personne);
			return true;
		}catch(Exception e){
			return false;
		}
	}


	public boolean modifyPersonne(String nom, String prenom, String dateNaissance,
			String lieuNaissance, String sexe) {

		CleComposite cle = new CleComposite(nom, prenom);

		Personne personne = entityManager.find(Personne.class,cle);

		if(personne != null)
		{
			personne.setDateNaissance(dateNaissance);
			personne.setLieuNaissance(lieuNaissance);
			personne.setSexe(sexe);
			entityManager.merge(personne);
			return true;
		}
		else
			return false;
	}

	public Personne getPersonne(String nom, String prenom) {
		CleComposite cle = new CleComposite(nom, prenom);
		Personne personne = entityManager.find(Personne.class,cle);
		return personne;
	}

	/**
	 * Lookup the stateless bean and gets a reference on it.
	 * @return the stateless bean business interface.
	 * @throws Exception if the bean cannot be retrieved.
	 */
	private Consultator getBean() throws Exception {

		Context initialContext = new InitialContext();

		Object o = initialContext.lookup("consultatorbean");

		if (o instanceof Consultator) {
			return (Consultator) o;
		}
		else throw new Exception("Cannot cast object into Consultator");

	}

	public boolean removePersonne(String nom, String prenom) throws Exception{
		CleComposite cle = new CleComposite(nom,prenom);
		Personne personne = entityManager.find(Personne.class,cle);
		if(personne != null)
		{
			List<CarteDeVisite> result = null ;
				Consultator consult = getBean();
				result = consult.listerTous();
				java.util.Iterator<CarteDeVisite> it = result.iterator();
				int i =0;
				while(it.hasNext())
				{
					CarteDeVisite carte = it.next();
					if(carte.getPrenom().equals(prenom) && carte.getNom().equals(nom))
					{
						i++;
						personne.removeCarteDeVisite(carte);
						entityManager.remove(entityManager.merge(carte));

					}

				}
			entityManager.remove(personne);
			return true;
		}
		else
			return false;
	}

}
